package com.know.dao;

import java.util.List;







import org.apache.commons.lang.StringUtils;

import my.db.QueryHelper;

import com.know.entity.Article;
import com.know.entity.Images;
import com.know.entity.Users;
import com.know.entity.Lables;
import com.know.entity.set_article_lable;
import com.know.entity.set_article_sorts;
import com.know.entity.Sorts;
import com.kzw.bean.Record;
import com.kzw.dao.support.Page;


public class ArticleDao {
	
	/**
	 * 保存文章
	 * @param article
	 * @param uuid 图片UUID
	 * return 生成的文章id
	 */
	public long save(Article article){
		//文章UUID生成
	
		String sql1= "insert into articles values(null,?,?,?,?,?,?,?,?)";//文章表
		String sql11="select article_id from articles order by article_id DESC LIMIT 1 ";
		String sql2="insert into set_article_lable values(?,?)";//标签选定表
		String sql3="insert into set_article_sorts values(?,?)";//分类选定表
		//System.out.println("文章值"+article.getUser_id()+article.getArticle_content()+article.getArticle_title()+article.getArticle_views()+article.getArticle_comment_count()+article.getArticle_date()+article.getArticle_like_count());
		QueryHelper.update(sql1,article.getUser_id(),article.getArticle_remark_content(),article.getArticle_content(),article.getArticle_title(),article.getArticle_views(),article.getArticle_comment_count(),article.getArticle_date(),article.getArticle_like_count());
		long id=QueryHelper.stat(sql11);//刚保存文章ID
		article.setArticle_id(id);
		QueryHelper.update(sql2, id,article.getSal().getLable_id());
		devide_sort(sql3, article);
		
		return id;
	}
	/**
	 * 权重拆分
	 */
	public void devide_sort(String sql3,Article article)
	{
		//拆分权重进行表设置
				long sort_va=article.getSort_va();
				System.out.println(sort_va);
					if(sort_va>=4)
					{
						QueryHelper.update(sql3, article.getArticle_id(),2);
						sort_va-=4;

					}
					if(sort_va>=2)
					{
						QueryHelper.update(sql3, article.getArticle_id(),3);

						sort_va-=2;

					}
					if(sort_va>=1)
					{
						QueryHelper.update(sql3, article.getArticle_id(),4);
					}
					QueryHelper.update(sql3, article.getArticle_id(),1);

					
				
	}
	/**
	 * 更新文章
	 */
	public void update(Article article){
		String sql1="UPDATE articles,set_article_lable SET   article_remark_content =?,article_content = ?,"
				+ "article_title =? WHERE articles.article_id =? ";
		String sql2="update set_article_lable set lable_id=? where (article_id=?) ";
		String sql3="update set_article_sorts set sort_id=? where (article_id=?)";
		QueryHelper.update(sql1,article.getArticle_remark_content(),article.getArticle_content(),article.getArticle_title(),article.getArticle_id());
		QueryHelper.update(sql2,article.getSal().getLable_id(), article.getArticle_id());
		devide_sort(sql3, article);

		
	}
	/**
	 * 查询所有文章
	 * @return
	 */
	public List<Article> findAll() {
		String sql = "select * from article";
		List<Article> list = QueryHelper.query(Article.class, sql);
		//QueryHelper.load(list, "type", "typeId", Dictionary.class);
		
		return list;
	}

	/**
	 * 分页查找
	 * */
	public Record findPage(Page<Article> page) {
		Record record = new Record();
		String sql = "select * from articles,set_article_lable where  articles.article_id=set_article_lable.article_id";
		if(page.getPage_temp()!=null&&!page.getPage_temp().equals("0"))
		{
			sql+=String.format(" and lable_id=%s",page.getPage_temp());

		}

		if(StringUtils.isNotBlank(page.getOrderBy())) {
			sql += String.format(" order by %s %s", page.getOrderBy(), page.getOrder());
		}

		List<Article> list = QueryHelper.queryPage(Article.class, sql, page.getPageNo(), page.getPageSize());
		String sql_load = "select user_nickname from users where user_id=?";
		QueryHelper.load(list, "user", "user_id", sql_load,Users.class);//加载用户信息
		QueryHelper.load(list, "sal", "article_id", set_article_lable.class);//加载标签信息
		QueryHelper.load(list, "sas", "article_id", set_article_sorts.class);//加载分类信息
		/*加载设定的对象属性中的对象*/
		for (Article article : list) {
			QueryHelper.load(article.getSal(),"la","lable_id",Lables.class);
		}
		/*记载设定分类权重属性中的对象值*/
		String sql_load2="select sum(sort_alias)  from set_article_sorts,sorts where article_id=? and  sorts.sort_id=set_article_sorts.sort_id";
		for (Article article : list) {
			article.setSort_va(QueryHelper.stat(sql_load2, article.getArticle_id()));
		}
		/*使用 用户对象中的临时变量存储一个图片地址信息，若没有图片则使用默认图片*/
		String sql_load3="select *from images where img_type_id=? and img_type='articles' LIMIT 1 ";
		for (Article article : list) {
			String src="img/jzytp.JPG";
			Images  image=QueryHelper.queryUnique(Images.class, sql_load3,article.getArticle_id());
			if(image!=null)
				src=image.getImg_path();
			article.setArticle_temp(src);
		}
		//统计总数count
		String sql2 = sql.toLowerCase().replaceFirst("select .*? from", "select count(*) from");
		long count = QueryHelper.stat(sql2);

		record.setCount(count);
		record.setData(list);
		
		return record;
	}
	private String getOneImage(String content){
		String sql="Select *from images";
		return null;
	}
	/**
	 * 点击热榜中前num个查询
	 */
	public List<Article> finTen(int num) {
		String sql = "select * from articles  order by article_like_count DESC  limit "+num;
		List<Article> list=QueryHelper.query(Article.class, sql);
		return list;
	}
	/**
	 * 站长推荐前Num个查询(SQL语句未修改）
	 * @param num
	 * @return
	 */
	public List<Article> findadm(int num) {
		
		String sql = "select * from articles  order by article_like_count DESC  limit "+num;
		List<Article> list=QueryHelper.query(Article.class, sql);
		/*记载设定分类权重属性中的对象值*/
		String sql_load2="select sum(sort_alias)  from set_article_sorts,sorts where article_id=? and  sorts.sort_id=set_article_sorts.sort_id";
		for (Article article : list) {
			article.setSort_va(QueryHelper.stat(sql_load2, article.getArticle_id()));
		}
		return list;
	}
	/**
	 * 根据ID查找
	 * @param parseLong
	 * @return
	 */
	public Article finById(long parseLong) {
		String sql="select *from articles where article_id=?";
		Article article=QueryHelper.queryUnique(Article.class, sql, parseLong);
		QueryHelper.load(article, "sal", "article_id",set_article_lable.class);
		return article;
	}
	/**
	 * 删除文章
	 */
	public void del(long id) {
		String sql="delete from articles where article_id=?";
		QueryHelper.update(sql, id);
	}
	/**
	 * 批量删除
	 * @param ids
	 */
	public void multiDel(String ids) {
		String sql = "delete from articles where article_id in (" + ids + ")";
		QueryHelper.update(sql);
		
	}
	/**
	 * 改变分类
	 * @param id
	 * @param sort_va 
	 */
	public void changeSot(long id, long sort_va) {
		String sql="delete from set_article_sorts WHERE (article_id=?) AND (sort_id=?) ";
		String sql_load="select sort_id from sorts WHERE sort_alias=?";
		sort_va=QueryHelper.stat(sql_load, sort_va);
		System.out.println("sort_va:"+sort_va);
		QueryHelper.update(sql,id,sort_va);
	
	}
	/**
	 * 增加分类
	 * @param id
	 * @param sort_va
	 */
	public void addSort(long id, long sort_va) {
		String sql="INSERT INTO set_article_sorts VALUES (?, ?)";
		String sql_load="select sort_id from sorts WHERE sort_alias=?";
		sort_va=QueryHelper.stat(sql_load, sort_va);
		QueryHelper.update(sql, id,sort_va);
	}
	

}
